function 函式名稱()
{
}
前面我們有講過參數的概念,因此當你要呼叫一個函式 假設叫 func() 的時候
func 參數1 參數2 ...
就會從檔名開始依序儲存在 position 變數(ex:$0,$1,$2...)中
我們藉由一個腳本來區別 return 和 exit 的差異
bash 腳本
1 #!/bin/bash
2
3
4 # return 函式
5 retfunc()
6 {
7 echo "進入 return 函式"
8 return 1
9 }
10
11 # exit 函式
12 exitfunc()
13 {
14 echo "進入 exit 函式"
15 exit 1
16 }
17
18 # 主函式
19 retfunc
20 echo "回傳完只有函式會消失,接着就換我 echo 了^^"
21 exitfunc
22 echo "不會執行到這句QAQ"
執行結果:
進入 return 函式
回傳完只有函式會消失,接着就換我 echo 了^^
進入 exit 函式
我們可以發現當 return 1 完的時候,整個腳本還是在繼續運行的,因此還是可以往下執行 echo;而 exit 1 完之後,直接結束整支腳本,因此沒有執行到下方的 echo。
函式內外的變數作用域預設都是全域型態,因此如果想要限制作用域在函式內的話需要爲變數加上 local
我們寫兩個腳本來搞清楚變數在函式中是如何運作。
bash 腳本
1 #!/bin/bash
2
3 func()
4 {
5 echo "進到函式中"
6 echo "函式內的 position 參數: $0 $1 $2"
7 var1="Inside"
8 echo "函式內的 var1:$var1"
9 }
10
11 echo "執行主程式"
12 echo "函式外的 position 參數: $0 $1 $2"
13 var1="Outside"
14 echo "函式外的 var1:$var1"
15 func one two
16 echo "離開函式"
17 echo "函式外的 var1:$var1"
執行結果:
執行主程式
函式外的 position 參數: ./variable_scope.sh one two
函式外的 var1:Outside
進到函式中
函式內的 position 參數: ./variable_scope.sh one two
函式內的 var1:Inside
離開函式
函式外的 var1:Inside
從執行結果我們可以發現,我們一開始在函式外面定義的變數是全域變數,結果進到函式之後,原本的全域變數遭到更改,因此可以得知函式中的變數屬於全域形態。
那我要怎麽限制函式內的作用域,讓函式內對於變數的改動不會影響到外面?
我們可以使用 local
。
1 #!/bin/bash
2
3 #函式區塊
4 func()
5 {
6 echo "進到函式中"
7 echo "函式內的 position 參數: $0 $1 $2"
8 local var1="Inside"
9 echo "函式內的 var1:$var1"
10 }
11
12 #主程式區塊
13 echo "執行主程式"
14 echo "函式外的 position 參數: $0 $1 $2"
15 var1="Outside"
16 echo "函式外的 var1:$var1"
17 func one two
18 echo "離開函式"
19 echo "函式外的 var1:$var1"
執行結果:
執行主程式
函式外的 position 參數: ./local_variable_scope.sh
函式外的 var1:Outside
進到函式中
函式內的 position 參數: ./local_variable_scope.sh one two
函式內的 var1:Inside
離開函式
函式外的 var1:Outside
https://stackoverflow.com/questions/4419952/difference-between-return-and-exit-in-bash-functions
https://www.shellscript.sh/